package nuc.ss.novel.utils;

import java.sql.*;

/**
 * @author : zzr
 * @description :这是用于连接数据库的类 通过这个类与数据库进行交互 位数据访问提供数据库的连接支持
 * @date :2024_12_18
 */
public class JDBCUtils {
    //数据库连接地址
    /**
     * jdbc:mysql:// 这是JDBC连接MySQL库的协议前缀，表示使用JDBC驱动来连接MySQL数据库
     * localhost:localhost表示本地主机 3306 Mysql数据库在下载时候的监听端口号
     * /db_novel ：数据库名位db_novel
     * ?useSSL=false：表示不使用 SSL（Secure Sockets Layer）加密连接
     * &useUnicode=true：设置为true表示使用 Unicode 字符编码
     * &characterEncoding=utf8：明确指定字符编码为UTF-8
     * &serverTimezone=GMT%2B8：设置数据库服务器的时区为东八区（GMT+8），也就是北京时间所在的时区
     */
    public static String URL = "jdbc:mysql://localhost:3306/db_novel?useSSL=false&useUnicode=true&characterEncoding=utf8&&serverTimezone=GMT%2B8";

    //数据库驱动
    //以便 Java 程序能够识别和使用相应的数据库驱动程序来建立与 MySQL 数据库的连接
    public static String DRIVER = "com.mysql.cj.jdbc.Driver";

    //数据库用户名
    public static String USER = "root";

    //数据库密码
    public static String PWD = "731889*a";

    //数据库连接
    public static Connection getConnection() {
        Connection con = null;
        try {
            // 加载驱动
            // 这是JDDBC连接数据库的第一步，确保驱动正确加载到内存中，以便后续能够使用数据库驱动来建立连接
            Class.forName(DRIVER);
            // 与数据库连接 获取连接对象
            con = DriverManager.getConnection(URL, USER, PWD);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        //这个方法会根据提供的连接地址，用户名和密码来建立与数据库的连接 如果连接成功，则会返回一个Connection对象
        //如果ClassNotFoundException（驱动未找到） 或者 SQLException（数据库连接失败）会打印堆栈跟踪信息,返回null
        return con;
    }

    /**
     * 连接是一种资源 使用后要及时关闭
     * con：连接对象
     * pstmt 预编译对象
     * rs 结果集
     */
    public static void close(Connection con,PreparedStatement pstmt, ResultSet rs) {

        try {
            if (rs != null) {
                rs.close();
            }
            if (pstmt != null) {
                pstmt.close();
            }
            if (con != null) {
                con.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }

}
